// API 请求和响应类型定义
// 基于 swagger.json 生成的统一类型定义

// ==================== 车辆相关 API ====================

export type TVehicleType = 'fuel' | 'electric' | 'motor';
export type TFuelType = '#92' | '#95' | '#98' | '柴油' | '电' | '其他';
export type TCurrency = 'CNY' | 'USD' | 'EUR';

// 创建车辆请求参数
export interface CreateCarRequest {
  name: string; // 车辆昵称
  category: string; // 车辆类型 (小汽车, 电车, 摩托车, 卡车, 其他)
  brand: string; // 品牌
  carModel: string; // 型号
  productionTime: number; // 生产时间（时间戳）
  purchaseTime: number; // 购买时间（时间戳）
  vehicleType: TVehicleType; // 车类型
  licensePlate?: string; // 车牌号
  notes?: string; // 备注
  currentMileage?: number; // 当前里程
  fuelCapacity?: number; // 油箱容积
  fuelType?: string; // 燃油类型 (#92, #95, #98, 电, 其他)
  purchasePrice?: number; // 购买价格
  currency?: string; // 货币 (CNY, USD, EUR)
  batteryCapacity?: number; // 电池容量
  mileage?: number; // 续航里程
}

// 更新车辆请求参数
export interface UpdateCarRequest {
  name?: string; // 车辆昵称
  brand?: string; // 品牌
  carModel?: string; // 型号
  licensePlate?: string; // 车牌号
  notes?: string; // 备注
  currentMileage?: number; // 当前里程
  fuelCapacity?: number; // 油箱容积
  fuelType?: string; // 燃油类型
  purchasePrice?: number; // 购买价格
  currency?: string; // 货币
  vehicleType?: TVehicleType; // 车类型
  batteryCapacity?: number; // 电池容量
  mileage?: number; // 续航里程
}

// 获取车辆列表查询参数
export interface GetCarsQuery {
  page?: number; // 页码
  limit?: number; // 每页数量
  category?: string; // 车辆类型筛选
}

// 车辆响应数据
export interface CarResponse {
  id: string;
  userId: string;
  name: string;
  category: string;
  brand: string;
  carModel: string;
  productionTime: number;
  purchaseTime: number;
  vehicleType: string;
  licensePlate?: string;
  notes?: string;
  currentMileage?: number;
  fuelCapacity?: number;
  fuelType?: string;
  purchasePrice?: number;
  currency?: string;
  batteryCapacity?: number;
  mileage?: number;
  createdAt: string;
  updatedAt: string;
}

// 创建车辆响应
export interface CreateCarResponse {
  success: boolean;
  message: string;
  data: CarResponse;
}
export interface TPagination {
  page: number;
  limit: number;
  total: number;
  totalPages: number;
}
// 获取车辆列表响应
export interface GetCarsResponse {
  success: boolean;
  message: string;
  data: CarResponse[];
  pagination?: TPagination;
}

// 获取车辆详情响应
export interface GetCarResponse {
  success: boolean;
  message: string;
  data: CarResponse;
}

// 更新车辆响应
export interface UpdateCarResponse {
  success: boolean;
  message: string;
  data: CarResponse;
}

// 删除车辆响应
export interface DeleteCarResponse {
  success: boolean;
  message: string;
}

// ==================== 费用记录相关 API ====================

// 加油信息类型
export interface TFuelInfo {
  /** 表显单价 */
  showPrice: number;
  /** 实付单价 */
  actualPrice?: number;
  /** 表显金额 */
  showAmount: number;
  /** 加油量 */
  fuelAmount: number;
  /** 燃油类型 */
  fuelType?: TFuelType;
  /** 优惠金额 */
  discountAmount?: number;
  /** 实付金额 */
  actualAmount?: number;
}
// 创建费用记录请求参数
export interface CreateExpenseRequest {
  vehicleId: string; // 车辆ID
  type: string; // 费用类型 (加油, 保养, 维修, 停车费, 年检, 保险, 罚单, 过路费, 拖车费, 洗车费, 车位费)
  /** 里程数 */
  mileage: number;
  /** 加油信息 */
  fuelInfo?: TFuelInfo;
  /** 邮箱是否加满 */
  isFull?: boolean;
  /** 上次是否记录 */
  isRecord?: boolean;
  /** 油箱灯是否亮 */
  isWarning?: boolean;
  /** 货币 */
  currency?: TCurrency;
  /** 费用日期 */
  date: string;
  /** 备注 */
  notes?: string;
  /** 费用地点 */
  location?: string;
  /** 里程表（保留向后兼容） */
  odometer?: number;
  /** 描述（保留向后兼容） */
  description?: string;
  imageUrl?: string;
}

// 更新费用记录请求参数
export interface UpdateExpenseRequest {
  type?: string; // 费用类型
  /** 里程数 */
  mileage?: number;
  /** 加油信息 */
  fuelInfo?: TFuelInfo;
  /** 邮箱是否加满 */
  isFull?: boolean;
  /** 上次是否记录 */
  isRecord?: boolean;
  /** 油箱灯是否亮 */
  isWarning?: boolean;
  /** 货币 */
  currency?: TCurrency;
  /** 费用日期 */
  date?: string;
  /** 备注 */
  notes?: string;
  /** 费用地点 */
  location?: string;
  /** 里程表（保留向后兼容） */
  odometer?: number;
  /** 描述（保留向后兼容） */
  description?: string;
  imageUrl?: string;
}

// 获取费用记录列表查询参数
export interface GetExpensesQuery {
  page?: number; // 页码
  limit?: number; // 每页数量
  vehicleId?: string; // 车辆ID筛选
  type?: string; // 费用类型筛选
  startDate?: string; // 开始日期
  endDate?: string; // 结束日期
}

// 费用记录响应数据
export interface ExpenseResponse {
  id: string;
  userId: string;
  vehicleId: string;
  type: string;
  /** 里程数 */
  mileage: number;
  /** 加油信息 */
  fuelInfo?: TFuelInfo;
  /** 邮箱是否加满 */
  isFull?: boolean;
  /** 上次是否记录 */
  isRecord?: boolean;
  /** 油箱灯是否亮 */
  isWarning?: boolean;
  /** 货币 */
  currency?: TCurrency;
  /** 费用日期 */
  date: Date | string;
  /** 备注 */
  notes?: string;
  /** 费用地点 */
  location?: string;
  /** 里程表（保留向后兼容） */
  odometer?: number;
  /** 描述（保留向后兼容） */
  description?: string;
  imageUrl?: string;
  /** 创建时间 */
  createdAt: Date | string;
  /** 更新时间 */
  updatedAt: Date | string;
  /** 虚拟字段：计算总金额 */
  totalAmount?: number;
}

// 创建费用记录响应
export interface CreateExpenseResponse {
  success: boolean;
  message: string;
  data: ExpenseResponse;
}

// 获取费用记录列表响应
export interface GetExpensesResponse {
  success: boolean;
  message: string;
  data: {
    expenses: ExpenseResponse[];
    pagination: TPagination;
  };
}

// 获取费用记录详情响应
export interface GetExpenseResponse {
  success: boolean;
  message: string;
  data: ExpenseResponse;
}

// 更新费用记录响应
export interface UpdateExpenseResponse {
  success: boolean;
  message: string;
  data: ExpenseResponse;
}

// 删除费用记录响应
export interface DeleteExpenseResponse {
  success: boolean;
  message: string;
}

// ==================== 收入记录相关 API ====================

export type TIncomeType =
  | '运营收入'
  | '商业用途收入'
  | '车辆出售'
  | '保险理赔'
  | '补贴与优惠'
  | '其他';

// 创建收入记录请求参数
export interface CreateIncomeRequest {
  vehicleId: string; // 车辆ID
  type: TIncomeType; // 收入类型 (运营收入, 商业用途收入, 车辆出售, 保险理赔, 补贴与优惠, 其他)
  amount: number; // 收入金额
  date: string; // 收入日期 (YYYY-MM-DD)
  description?: string; // 描述
}

// 更新收入记录请求参数
export interface UpdateIncomeRequest {
  type?: string; // 收入类型
  amount?: number; // 收入金额
  date?: string; // 收入日期
  description?: string; // 描述
}

// 获取收入记录列表查询参数
export interface GetIncomesQuery {
  page?: number; // 页码
  limit?: number; // 每页数量
  vehicleId?: string; // 车辆ID筛选
  type?: string; // 收入类型筛选
  startDate?: string; // 开始日期
  endDate?: string; // 结束日期
}

// 收入记录响应数据
export interface IncomeResponse {
  id: string;
  userId: string;
  vehicleId: string;
  type: string;
  amount: number;
  date: string;
  description?: string;
  createdAt: string;
  updatedAt: string;
}

// 创建收入记录响应
export interface CreateIncomeResponse {
  success: boolean;
  message: string;
  data: IncomeResponse;
}

// 获取收入记录列表响应
export interface GetIncomesResponse {
  success: boolean;
  message: string;
  data: IncomeResponse[];
  pagination?: TPagination;
}

// 获取收入记录详情响应
export interface GetIncomeResponse {
  success: boolean;
  message: string;
  data: IncomeResponse;
}

// 更新收入记录响应
export interface UpdateIncomeResponse {
  success: boolean;
  message: string;
  data: IncomeResponse;
}

// 删除收入记录响应
export interface DeleteIncomeResponse {
  success: boolean;
  message: string;
}

// ==================== 用户相关 API ====================

// 用户注册请求参数
export interface RegisterRequest {
  username: string; // 用户名
  email: string; // 邮箱
  password: string; // 密码
  nickname?: string; // 昵称
}

// 用户登录请求参数
export interface LoginRequest {
  username: string; // 用户名
  password: string; // 密码
}

// 修改密码请求参数
export interface ChangePasswordRequest {
  oldPassword: string; // 旧密码
  newPassword: string; // 新密码
}

// 更新用户信息请求参数
export interface UpdateUserRequest {
  nickname?: string; // 昵称
  email?: string; // 邮箱
}

// 用户响应数据
export interface UserResponse {
  id: string;
  username: string;
  email: string;
  nickname?: string;
  role: string;
  createdAt: string;
  updatedAt: string;
}

// 用户注册响应
export interface RegisterResponse {
  success: boolean;
  message: string;
  data: UserResponse;
}

// 用户登录响应
export interface LoginResponse {
  success: boolean;
  message: string;
  data: {
    user: UserResponse;
    token: string;
  };
}

// 获取用户信息响应
export interface GetUserResponse {
  success: boolean;
  message: string;
  data: UserResponse;
}

// 更新用户信息响应
export interface UpdateUserResponse {
  success: boolean;
  message: string;
  data: UserResponse;
}

// 修改密码响应
export interface ChangePasswordResponse {
  success: boolean;
  message: string;
}

// ==================== 统计相关 API ====================

// 获取统计数据查询参数
export interface GetStatisticsQuery {
  vehicleId?: string; // 车辆ID
  startDate?: string; // 开始日期
  endDate?: string; // 结束日期
  period?: string; // 统计周期 (day, week, month, year)
}

// 统计数据响应
export interface StatisticsResponse {
  period: string;
  totalExpense: number;
  totalIncome: number;
  netExpense: number;
  fuelConsumption: number;
  averageFuelConsumption: number;
  totalDistance: number;
  averageDistance: number;
  totalDiscount: number;
  expenseBreakdown: Record<string, number>;
}

// 获取统计数据响应
export interface GetStatisticsResponse {
  success: boolean;
  message: string;
  data: StatisticsResponse;
}

// ==================== 图表相关 API ====================

// 获取油耗趋势图表数据查询参数
export interface GetFuelTrendQuery {
  vehicleId?: string; // 车辆ID
  startDate?: string; // 开始日期
  endDate?: string; // 结束日期
}

// 获取费用趋势图表数据查询参数
export interface GetExpenseTrendQuery {
  vehicleId?: string; // 车辆ID
  startDate?: string; // 开始日期
  endDate?: string; // 结束日期
}

// 图表数据响应
export interface ChartDataResponse {
  labels: string[];
  datasets: Array<{
    label: string;
    data: number[];
    backgroundColor?: string;
    borderColor?: string;
  }>;
}

// 获取图表数据响应
export interface GetChartDataResponse {
  success: boolean;
  message: string;
  data: ChartDataResponse;
}

// ==================== 配置相关 API ====================

// 设置系统参数请求参数
export interface SetSystemParamRequest {
  key: string; // 参数键
  value: string; // 参数值
  description?: string; // 参数描述
}

// 获取系统参数查询参数
export interface GetSystemParamQuery {
  key?: string; // 参数键
}

// 系统参数响应数据
export interface SystemParamResponse {
  id: string;
  key: string;
  value: string;
  description?: string;
  createdAt: string;
  updatedAt: string;
}

// 设置系统参数响应
export interface SetSystemParamResponse {
  success: boolean;
  message: string;
  data: SystemParamResponse;
}

// 获取系统参数响应
export interface GetSystemParamResponse {
  success: boolean;
  message: string;
  data: SystemParamResponse | SystemParamResponse[];
}

// 获取费用类型响应
export interface GetExpenseTypesResponse {
  success: boolean;
  message: string;
  data: string[];
}

// ==================== 通用响应类型 ====================

// 通用错误响应
export interface ErrorResponse {
  success: false;
  message: string;
  error?: string;
}

// 通用成功响应
export interface SuccessResponse {
  success: true;
  message: string;
}

// 分页响应
export interface PaginatedResponse<T> {
  success: boolean;
  message: string;
  data: T[];
  pagination: TPagination;
}
